/**
 * 作者：
 * 创建时间：2012-6-27 上午10:53:38
 */
package dragon.model.table;

import java.util.HashMap;
import java.util.Map;

import dragon.core.db.DBUtil;
import dragon.core.db.DBUtil.DatabaseProduct;
import dragon.core.exception.ExceptionHandler;

/**
 * 中立数据类型与特定数据库的映射关系
 */
public class DataTypeMapping {

	/**
	 * PostgreSql 数据类型与中立数据类型映射关系
	 */
	@SuppressWarnings("serial")
	private static Map<DataType, String> postgresqlMapping = new HashMap<DataType, String>() {
		{
			put(DataType.CHAR, "char");
			put(DataType.VARCHAR, "varChar");
			put(DataType.INT2, "smallint");
			put(DataType.INT4, "integer");
			put(DataType.INT8, "bigint");
			put(DataType.DECIMAL, "numeric");
			put(DataType.DATE, "date");
			put(DataType.TIME, "time");
			put(DataType.DATETIME, "timestamp");
			put(DataType.BLOB, "bytea");
			put(DataType.CLOB, "text");
		}
	};

	/**
	 * 获取中立数据类型与特定数据库的映射关系
	 * 
	 * @param dbName
	 *            指定连接的数据库名称
	 * @return
	 * @throws ExceptionHandler
	 */
	public static Map<DataType, String> getDataTypeMapping(String dbName) throws ExceptionHandler {
		DatabaseProduct product = DBUtil.getDatabaseProduct(dbName);
		if (DatabaseProduct.PostgreSQL.equals(product)) {
			return postgresqlMapping;
		} else {
			// TODO:完善其它数据库类型映射
		}
		return null;
	}
}
